home *** CD-ROM | disk | FTP | other *** search
/ NeXT Enterprise Objects Framework 1.1 / NeXT Enterprise Objects Framework 1.1.iso / NextDeveloper / Examples / EnterpriseObjects / SHLExamples / Delegation / EOFDelegateDatabaseCategory.m < prev    next >
Encoding:
Text File  |  1994-12-07  |  7.3 KB  |  307 lines

  1. /*--------------------------------------------------------------------------
  2.  *
  3.  *     You may freely copy, distribute, and reuse the code in this example.
  4.  *     SHL Systemhouse disclaims any warranty of any kind, expressed or  
  5.  *    implied, as to its fitness for any particular use.
  6.  *
  7.  *
  8.  *    Database
  9.  *
  10.  *    Category Of:    EOFDelegate
  11.  *
  12.  *    Conforms To:    None
  13.  *
  14.  *    Declared In:    EOFDelegateDatabaseCategory.h
  15.  *
  16.  *
  17.  *------------------------------------------------------------------------*/
  18. #import "EOFDelegateDatabaseCategory.h"
  19.  
  20.  
  21.  
  22.  
  23. @implementation EOFDelegate (Database)
  24.  
  25. /*--------------------------------------------------------------------------
  26.  *    EODatabaseChannel Delegate Methods
  27.  *------------------------------------------------------------------------*/
  28. - databaseChannel:channel willInsertObject:object
  29. {
  30.     // Invoked from -insertObject: to tell the delegate that an object will
  31.     // be inserted. The delegate may return the object, a substitute, or nil
  32.     // to prevent insertion.
  33.     
  34.     id    result = object;
  35.     
  36.     [[NXApp delegate] announce:channel 
  37.         selector:_cmd 
  38.         with:[NSArray arrayWithObject:object]];
  39.  
  40.     if ([[NXApp delegate] wantsAlertPanels] == YES)
  41.         {
  42.         switch (NXRunAlertPanel ("EODatabaseChannel", 
  43.             "%s", "YES", "NO", NULL, sel_getName(_cmd)))
  44.             {
  45.             case NX_ALERTALTERNATE:
  46.                 result = nil;
  47.                 break;
  48.             case NX_ALERTDEFAULT:
  49.             default:
  50.                 result = object;
  51.                 break;
  52.             }
  53.         }
  54.     
  55.     return result;
  56. }
  57.  
  58.  
  59. - (void)databaseChannel:channel didInsertObject:object
  60. {
  61.     // Invoked from -insertObject: to tell the delegate that 
  62.     // an object was inserted.
  63.  
  64.     [[NXApp delegate] announce:channel 
  65.         selector:_cmd 
  66.         with:[NSArray arrayWithObject:object]];
  67. }
  68.  
  69.  
  70. - databaseChannel:channel willDeleteObject:object
  71. {
  72.     // Invoked from -deleteObject: to tell the delegate that an object will
  73.     // be deleted.  The delegate may return the object, a substitute, or nil
  74.     // to prevent deletion.
  75.     
  76.     id    result = object;
  77.     
  78.     [[NXApp delegate] announce:channel 
  79.         selector:_cmd 
  80.         with:[NSArray arrayWithObject:object]];
  81.     
  82.     if ([[NXApp delegate] wantsAlertPanels] == YES)
  83.         {
  84.         switch (NXRunAlertPanel ("EODatabaseChannel", 
  85.             "%s", "YES", "NO", NULL, sel_getName(_cmd)))
  86.             {
  87.             case NX_ALERTALTERNATE:
  88.                 result = nil;
  89.                 break;
  90.             case NX_ALERTDEFAULT:
  91.             default:
  92.                 result = object;
  93.                 break;
  94.             }
  95.         }
  96.     
  97.     return result;
  98. }
  99.  
  100.  
  101. - (void)databaseChannel:channel didDeleteObject:object
  102. {
  103.     // Invoked from -deleteObject: to tell the delegate that 
  104.     // an object was deleted.
  105.  
  106.     [[NXApp delegate] announce:channel 
  107.         selector:_cmd 
  108.         with:[NSArray arrayWithObject:object]];
  109. }
  110.  
  111.  
  112. - databaseChannel:channel willUpdateObject:object
  113. {
  114.     // Invoked from -updateObject: to tell the delegate that an object will
  115.     // be updated.  The delegate may return the object, a substitute, or nil
  116.     // to prevent updating.
  117.     
  118.     id    result = object;
  119.     
  120.     [[NXApp delegate] announce:channel 
  121.         selector:_cmd 
  122.         with:[NSArray arrayWithObject:object]];
  123.     
  124.     if ([[NXApp delegate] wantsAlertPanels] == YES)
  125.         {
  126.         switch (NXRunAlertPanel ("EODatabaseChannel", 
  127.             "%s", "YES", "NO", NULL, sel_getName(_cmd)))
  128.             {
  129.             case NX_ALERTALTERNATE:
  130.                 result = nil;
  131.                 break;
  132.             case NX_ALERTDEFAULT:
  133.             default:
  134.                 result = object;
  135.                 break;
  136.             }
  137.         }
  138.     
  139.     return result;
  140. }
  141.  
  142.  
  143. - (void)databaseChannel:channel didUpdateObject:object
  144. {
  145.     // Invoked from -updateObject: to tell the delegate that 
  146.     // an object was updated.
  147.  
  148.     [[NXApp delegate] announce:channel 
  149.         selector:_cmd 
  150.         with:[NSArray arrayWithObject:object]];
  151. }
  152.  
  153.  
  154. - (NSDictionary *)databaseChannel:channel
  155.     willRefetchObject:object
  156.     fromSnapshot:(NSDictionary *)snapshot
  157. {
  158.     // Invoked whenever an object that was previously fetched is fetched again
  159.     // and the re-fetched data is different from that in the object.  The
  160.     // object will be refetched with the dictionary returned by this method,
  161.     // which may be the snapshot provided or a substitute.  The delegate may
  162.     // also return nil to prevent the object from being refetched.
  163.     
  164.     id    result = object;
  165.     
  166.     [[NXApp delegate] announce:channel 
  167.         selector:_cmd 
  168.         with:[NSArray arrayWithObjects: object, snapshot, nil]];
  169.     
  170.     if ([[NXApp delegate] wantsAlertPanels] == YES)
  171.         {
  172.         switch (NXRunAlertPanel ("EODatabaseChannel", 
  173.             "%s", "YES", "NO", NULL, sel_getName(_cmd)))
  174.             {
  175.             case NX_ALERTALTERNATE:
  176.                 result = nil;
  177.                 break;
  178.             case NX_ALERTDEFAULT:
  179.             default:
  180.                 result = object;
  181.                 break;
  182.             }
  183.         }
  184.     
  185.     return result;
  186. }
  187.  
  188.  
  189.  
  190. - (BOOL)databaseChannel:channel
  191.     willSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier
  192.     fetchOrder:(NSArray *)fetchOrder
  193. {
  194.     // Invoked from -selectObjectsDescribedByQualifier:...  to tell the
  195.     // delegate that the channel will select objects as specified by
  196.     // qualifier.  The delegate can modify the qualifier and fetch order.  If
  197.     // the delegate returns YES the channel will go ahead and select the
  198.     // object; if the delegate returns NO the channel will abort the select
  199.     // and return NO.
  200.     
  201.     BOOL    result = YES;
  202.     
  203.     [[NXApp delegate] announce:channel 
  204.         selector:_cmd 
  205.         with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]];
  206.     
  207.     if ([[NXApp delegate] wantsAlertPanels] == YES)
  208.         {
  209.         switch (NXRunAlertPanel ("EODatabaseChannel", 
  210.             "%s", "YES", "NO", NULL, sel_getName(_cmd)))
  211.             {
  212.             case NX_ALERTALTERNATE:
  213.                 result = NO;
  214.                 break;
  215.             case NX_ALERTDEFAULT:
  216.             default:
  217.                 result = YES;
  218.                 break;
  219.             }
  220.         }
  221.     
  222.     return result;
  223. }
  224.  
  225.  
  226. - (void)databaseChannel:channel
  227.     didSelectObjectsDescribedByQualifier:(EOQualifier *)qualifier
  228.     fetchOrder:(NSArray *)fetchOrder
  229. {
  230.     // Invoked from -selectObjectsDescribedByQualifier:...  to tell the
  231.     // delegate that the channel selected objects as specified by qualifier.
  232.  
  233.     [[NXApp delegate] announce:channel 
  234.         selector:_cmd 
  235.         with:[NSArray arrayWithObjects: qualifier, fetchOrder, nil]];
  236. }
  237.  
  238.  
  239. - (void)databaseChannel:channel
  240.     willFetchObjectOfClass:(Class)class
  241.     withZone:(NSZone *)zone
  242. {
  243.     // Invoked from -fetchWithZone: to tell the delegate that 
  244.     // the channel willfetch the next selected object.
  245.  
  246.     [[NXApp delegate] announce:channel 
  247.         selector:_cmd 
  248.         with:[NSArray arrayWithObject:class]];
  249. }
  250.  
  251.  
  252. - (void)databaseChannel:channel didFetchObject:object
  253. {
  254.     // Invoked from -fetchWithZone: to tell the delegate that 
  255.     // the channel fetched the next selected object.
  256.     
  257.     [[NXApp delegate] announce:channel 
  258.         selector:_cmd 
  259.         with:[NSArray arrayWithObject:object]];
  260. }
  261.  
  262.  
  263. - (BOOL)databaseChannel:channel willLockObject:object
  264. {
  265.     // Invoked from -lockObject: to tell the delegate that object will be
  266.     // locked using snapshot data to determine whether the database has been
  267.     // modified.  The delegate may return YES to allow the channel to proceed,
  268.     // or NO to cause the operation to fail and -lockObject: to return NO.
  269.     
  270.     BOOL    result = YES;
  271.     
  272.     [[NXApp delegate] announce:channel 
  273.         selector:_cmd 
  274.         with:[NSArray arrayWithObject:object]];
  275.     
  276.     if ([[NXApp delegate] wantsAlertPanels] == YES)
  277.         {
  278.         switch (NXRunAlertPanel ("EODatabaseChannel", 
  279.             "%s", "YES", "NO", NULL, sel_getName(_cmd)))
  280.             {
  281.             case NX_ALERTALTERNATE:
  282.                 result = NO;
  283.                 break;
  284.             case NX_ALERTDEFAULT:
  285.             default:
  286.                 result = YES;
  287.                 break;
  288.             }
  289.         }
  290.     
  291.     return result;
  292. }
  293.  
  294.  
  295. - (void)databaseChannel:channel didLockObject:object
  296. {
  297.     // Invoked from -lockObject: to tell the delegate that 
  298.     // object was locked.
  299.  
  300.     [[NXApp delegate] announce:channel 
  301.         selector:_cmd 
  302.         with:[NSArray arrayWithObject:object]];
  303. }
  304.  
  305.  
  306. @end
  307.